最近在阅读《JavaScript高级程序设计第3版》的过程中,看到了label语句的使用,因为之前没使用过,觉得有必要学习一下,特此记录。
label语句是ECMA中定义的语句,因此不存在兼容性的问题,使用label语句是为了给代码添加标签,方便将来使用,语法如下:

label: statement

//下面是一个示例:
 start: for (var i=0; i < count; i++) {
        alert(i);
}

label语句可以与break 和 continue 语句联合使用,从而返回代码中特定的位置。这种联合使用的情况多发生在循环嵌套的情况下:

var num = 0;
outermost:
for (var i=0; i < 10; i++) {
     for (var j=0; j < 10; j++) {
        if (i == 5 && j == 5) {
            break outermost;
        }
        num++; 
    }
}
alert(num);    //55

在这个例子中,outermost 标签表示外部的 for 语句。如果每个循环正常执行 10 次,则 num++ 语句就会正常执行 100次。换句话说,如果两个循环都自然结束,num 的值应该是 100。但内部循环中 的 break语句带了一个参数:要返回到的标签。添加这个标签的结果将导致 break 语句不仅会退出内 部的 for 语句(即使用变量 j的循环),而且也会退出外部的 for 语句(即使用变量 i 的循环)。为此, 当变量 i 和 j 都等于 5 时,num 的值正好是55。同样,continue 语句也可以像这样与 label 语句联 用,如下面的例子所示:

var num = 0;
outermost:
for (var i=0; i < 10; i++) {
    for (var j=0; j < 10; j++) { 
        if (i == 5 && j == 5) { 
            continue outermost;
    }
        num++; 
   }
}
alert(num);    //95

在这种情况下,continue 语句会强制继续执行循环——退出内部循环,执行外部循环。当 j 是 5 时,continue 语句执行,而这也就意味着内部循环少执行了 5 次,因此 num 的结果是 95。
虽然联用 break、continue 和 label 语句能够执行复杂的操作,但如果使用过度,也会给调试 带来麻烦。在此,我们建议如果使用 label 语句,一定要使用描述性的标签,同时不要嵌套过多的循环。




----来源《JavaScript高级程序设计第3版》

a公子小白
60 声望2 粉丝